Week 2
SE Intro
Can explain pros and cons of software engineering :
softwareEngineering/introduction/prosAndCons
Revision Control
Can use Git to save history :
revisionControl/what
revisionControl/repositories
gitAndGithub/init
revisionControl/savingHistory
gitAndGithub/commit
gitAndGithub/ignore
Can communicate with a remote repo :
revisionControl/remoteRepositories
gitAndGithub/clone
gitAndGithub/pull
gitAndGithub/push
Can traverse Git history :
revisionControl/usingHistory
gitAndGithub/checkout
gitAndGithub/tag
gitAndGithub/stash
Design
Can explain models :
modeling/introduction/what
modeling/introduction/how
Can explain OOP :
oop/introduction/what
oop/objects/what
oop/classes/what
oop/objects/abstraction
oop/objects/encapsulation
Can explain basic object/class structures :
modeling/modelingStructures/ooStructures
modeling/modelingStructures/classDiagramsBasic
uml/miscellaneous/objectVsClassDiagrams
Week 3
IDEs
Can use basic features of an IDE :
ides/introduction/what
intellij/projectSetup
intellij/codeNavigation
Can use intermediate level features of an IDE :
ides/debugging/what
intellij/debuggingBasic
intellij/productivityShortcuts
Refactoring
Can refactor code at a basic level :
refactoring/what
intellij/refactoring
refactoring/how
refactoring/when
Implementation
C++ to Java :
cppToJava/javaWorld/what
cppToJava/javaWorld/how
cppToJava/javaWorld/editions
Can implement classes :
cppToJava/classes/definingClasses
:
cppToJava/classes/gettersAndSetters :
Can implement class-level members :
oop/classes/classLevelMembers
Can use Java varargs feature :
javaTools/varargs
🅿️ Project
Can define the target of a product
:
Can work with a 1KLoC code base :
Week 4
Testing
Can automate simple regression testing of text UIs :
testing/introduction/what
testing/testingTypes/regressionTesting/what
testing/testAutomation/what
testing/testAutomation/testingTextUis
Requirements
Can explain requirements :
requirements/introduction
requirements/nonFunctionalRequirements
requirements/prioritizing
requirements/quality
Can explain some techniques for gathering requirements :
gatheringRequirements/brainstorming
gatheringRequirements/productSurveys
gatheringRequirements/observation
gatheringRequirements/userSurveys
gatheringRequirements/interviews
gatheringRequirements/focusGroups
Can use some techniques for specifying requirements :
specifyingRequirements/prose/what
specifyingRequirements/featureList/what
specifyingRequirements/userStories/introduction
specifyingRequirements/userStories/details
specifyingRequirements/userStories/usage
specifyingRequirements/useCases/introduction
specifyingRequirements/useCases/identifying
specifyingRequirements/useCases/details
specifyingRequirements/useCases/usage
specifyingRequirements/glossary/what
specifyingRequirements/supplementaryRequirements/what
gatheringRequirements/prototyping
Documentation
Can use some common documentation tools :
documentation/tools/javaDoc/what
documentation/tools/javaDoc/how
documentation/tools/markdown/what
documentation/tools/markdown/how
documentation/tools/asciiDoc/what
Implementation
Can use Generics in Java :
cppToJava/generics/what
cppToJava/generics/how
Can use Java Collections :
cppToJava/collections/what
cppToJava/collections/arrayListClass
cppToJava/collections/hashMapClass
Can use Java enumerations :
oop/classes/enumerations
javaTools/enums
Project Management
Can create PRs on GitHub :
revisionControl/branching
gitAndGithub/branch
gitAndGithub/createPRs
🅿️ Project
Can define requirements of a product
:
Week 5
Design
Can explain single responsibility principle :
principles/singleResponsibilityPrinciple
OOP
Can explain associations :
oop/associations/what
uml/classDiagrams/associations/what
Can explain dependencies among classes :
oop/associations/dependencies
uml/classDiagrams/dependencies/what
Can implement composition :
oop/associations/composition
uml/classDiagrams/composition/what
Can implement aggregation :
oop/associations/aggregation
uml/classDiagrams/aggregation/what
Can implement inheritance :
oop/inheritance/what
uml/classDiagrams/classInheritance/what
Implementation
Can follow
a simple style guide :
codeQuality/introduction/basic
codeQuality/followStandard/introduction
codeQuality/followStandard/basic
codeQuality/followStandard/intermediate
Can improve code readability :
codeQuality/maximiseReadability/introduction
codeQuality/maximiseReadability/basic/avoidLongMethods
codeQuality/maximiseReadability/basic/avoidDeepNesting
codeQuality/maximiseReadability/basic/avoidComplicatedExpressions
codeQuality/maximiseReadability/basic/avoidMagicNumbers
codeQuality/maximiseReadability/basic/makeCodeObvious
codeQuality/maximiseReadability/intermediate/structureCodeLogically
codeQuality/maximiseReadability/intermediate/dontTripReader
codeQuality/maximiseReadability/intermediate/practiceKISSing
codeQuality/maximiseReadability/intermediate/avoidPrematureOptimizations
codeQuality/maximiseReadability/intermediate/slapHard
codeQuality/maximiseReadability/advanced/makeHappyPathProminent
Project Management
Can follow Forking Workflow :
revisionControl/forkingWorkflow
gitAndGithub/forkingWorkflow
revisionControl/drcsVsCrcs
revisionControl/featureBranchFlow
revisionControl/centralizedFlow
Can use GitHub PRs in a workflow :
gitAndGithub/mergeConflicts
gitAndGithub/managePRs
🅿️ Project
Can work with a 2KLoC code base
:
Can conceptualize a product
:
Week 6
OOP
Can explain overloading
:
oop/inheritance/overloading
Can implement polymorphism :
oop/inheritance/overriding
oop/polymorphism/what
cppToJava/inheritance/polymorphism
oop/inheritance/abstractClasses
uml/classDiagrams/abstractClasses/what
cppToJava/inheritance/abstractClassesAndMethods
oop/inheritance/interfaces
uml/classDiagrams/interfaces/what
cppToJava/inheritance/interfaces
Design
Can interpret an architecture diagram :
design/introduction/what
architecture/architectureDiagrams/reading
designApproaches/multilevelDesign/what
Can explain
architectural styles :
architecture/architecturalStyles/introduction/what
architecture/architecturalStyles/nTier/what
architecture/architecturalStyles/clientServer/what
architecture/architecturalStyles/eventDriven/what
architecture/architecturalStyles/transactionProcessing/what
architecture/architecturalStyles/serviceOriented/what
architecture/architecturalStyles/more/moreStyles
architecture/architecturalStyles/more/usingStyles
Can use intermediate-level class diagrams
:
uml/notes/notes
uml/notes/constraints
uml/classDiagrams/associationsAsAttributes/what
Coding best practices
Can use good naming :
codeQuality/nameWell/introduction
codeQuality/nameWell/basic/nounsAndVerbsAsNames
codeQuality/nameWell/basic/useStandardWords
codeQuality/nameWell/intermediate/useNameExplain
codeQuality/nameWell/intermediate/notTooLongNorShort
codeQuality/nameWell/intermediate/avoidMisleadingNames
Can avoid
unsafe coding
practices :
codeQuality/avoidShortcuts/introduction
codeQuality/avoidShortcuts/basic/useDefaultBranch
codeQuality/avoidShortcuts/basic/dontRecycleVarsOrParams
codeQuality/avoidShortcuts/basic/avoidEmptyCatchBlocks
codeQuality/avoidShortcuts/basic/deleteDeadCode
codeQuality/avoidShortcuts/intermediate/minimiseVariableScope
codeQuality/avoidShortcuts/intermediate/minimiseCodeDuplication
Can
write
good
code
comments
:
codeQuality/commentMinimally/introduction
codeQuality/commentMinimally/basic/dontRepeatObvious
codeQuality/commentMinimally/basic/writeToReader
codeQuality/commentMinimally/intermediate/explainWhatWhyNotHow
Project Management
Can
explain
continuous
integration
and
continuous
deployment
:
integration/introduction/what
integration/buildAutomation/what
integration/buildAutomation/continuousIntegrationDeployment
🅿️ Project
Can
contribute
to
project
documentation
:
Week 7
Design
Can
interpret
basic
sequence
diagrams
:
uml/sequenceDiagrams/introduction
uml/sequenceDiagrams/basic
uml/sequenceDiagrams/loops
uml/sequenceDiagrams/objectCreation
uml/sequenceDiagrams/minimalNotation
modeling/modelingBehaviors/sequenceDiagramsBasic
Can
explain
APIs
:
reuse/apis/what
Can
use
intermediate-level
sequence
diagrams
:
uml/sequenceDiagrams/objectDeletion
uml/sequenceDiagrams/selfInvocation
uml/sequenceDiagrams/alternativePaths
uml/sequenceDiagrams/optionalPaths
uml/sequenceDiagrams/referenceFrames
modeling/modelingBehaviors/sequenceDiagramsIntermediate
uml/sequenceDiagrams/parallelPaths
Implementation
Can
use
logging
:
errorHandling/logging/what
errorHandling/logging/how
Can
use
assertions
:
errorHandling/assertions/what
errorHandling/assertions/how
errorHandling/assertions/when
Can
do
exception
handling
in
code
:
errorHandling/introduction/what
errorHandling/exceptions/what
errorHandling/exceptions/how
errorHandling/exceptions/when
Can
use
Java8
streams
:
javaTools/streamsBasic
Can
use
JavaFX
to
build
a
simple
GUI
:
javaTools/javaFXBasic
🅿️ Project
Can
do
small
changes
to
an
existing
software
:
Week 8
Design
Can
use
basic
software
design
principles
:
designFundamentals/abstraction/what
designFundamentals/coupling/what
designFundamentals/coupling/how
designFundamentals/coupling/types
designFundamentals/cohesion/what
designFundamentals/cohesion/how
principles/separationOfConcernsPrinciple
principles/openClosedPrinciple
Implementation
Can
explain
integration
approaches
:
integration/approaches/lateVsEarly
integration/approaches/bigBangVsIncremental
integration/approaches/topDownVsBottomUp
Can
implement
association
classes
:
oop/associations/associationClasses
Quality Assurance
Can
explain
different
types
of
testing
:
testing/testingTypes/unitTesting/what
testing/testingTypes/unitTesting/stubs
testing/dependencyInjection/what
testing/dependencyInjection/how
testing/testingTypes/integrationTesting/what
testing/testingTypes/integrationTesting/how
testing/testingTypes/systemTesting/what
testing/testAutomation/testingGuis
testing/testingTypes/acceptanceTesting/what
testing/testingTypes/acceptanceTesting/acceptanceVsSystemTesting
testing/testingTypes/alphaBetaTesting/what
Can
write
simple
JUnit
tests
:
testing/testingTypes/developerTesting/what
testing/testingTypes/developerTesting/why
testing/testAutomation/usingTestDrivers
testing/testAutomation/tools
junit/basic
Project Management
Can
use
basic
scheduling
and
tracking
tools
:
projectPlanning/milestones
projectPlanning/buffers
projectPlanning/issueTrackers
projectPlanning/workBreakdownStructure
projectPlanning/ganttCharts
projectPlanning/pertCharts
teamwork/teamStructures
🅿️ Project
Can
plan/track
project
schedule
:
Week 9
Design
Can
use
models
to
conceptualize
an
OO
solution
:
modeling/modelingASolution/introduction
modeling/modelingASolution/basic
modeling/modelingASolution/intermediate
Can
use
intermediate-level
design
principles
:
oop/inheritance/substitutability
oop/inheritance/dynamicAndStaticBinding
oop/polymorphism/how
designApproaches/topDownBottomUp/what
designApproaches/agileDesign/what
principles/liskovSubstitutionPrinciple
principles/interfaceSegregationPrinciple
principles/dependencyInversionPrinciple
Implementation
Can
use
defensive
programming
:
errorHandling/defensiveProgramming/what
errorHandling/defensiveProgramming/compulsoryAssociations
errorHandling/defensiveProgramming/1to1Associations
errorHandling/defensiveProgramming/referentialIntegrity
errorHandling/defensiveProgramming/when
errorHandling/designByContract/what
Quality Assurance
Can
use
intermediate-level
testing
techniques
:
testing/introduction/testability
testing/testCoverage/what
testing/testCoverage/how
junit/intermediate
testing/tdd/what
Can
explain
some
QA
techniques
complementary
to
testing
:
qualityAssurance/introduction/what
qualityAssurance/introduction/validationVsVerification
qualityAssurance/codeReviews/what
qualityAssurance/staticAnalysis/what
qualityAssurance/formalVerification/what
Documentation
Can
apply
best
practices
when
writing
developer
documents
:
documentation/introduction/what
documentation/guidelines/aimForComprehensibility/what
documentation/guidelines/aimForComprehensibility/how
documentation/guidelines/goTopDown/what
documentation/guidelines/goTopDown/why
documentation/guidelines/goTopDown/how
documentation/guidelines/documentMinimally/what
documentation/guidelines/documentMinimally/how
architecture/architectureDiagrams/drawing
🅿️ Project
Can
write
developer
documentation
:
Week 10
SE
Can
explain
SE
principles
:
principles/lawOfDemeter
principles/solidPrinciples
principles/yagniPrinciple
principles/dryPrinciple
principles/brooksLaw
Requirements
Can
use
activity
diagrams
:
modeling/modelingBehaviors/activityDiagrams
uml/activityDiagrams/basicNotations/rakes
uml/activityDiagrams/basicNotations/swimlanes
Design
Can
use
some
basic
design
patterns
:
designPatterns/introduction/what
designPatterns/introduction/format
designPatterns/singleton/what
designPatterns/singleton/implementation
designPatterns/singleton/evaluation
designPatterns/facade/what
designPatterns/command/what
Implementation
Can
get
reuse
benefits
from
frameworks,
libraries,
and
platforms
:
reuse/introduction/what
reuse/introduction/when
reuse/libraries/what
reuse/libraries/how
reuse/frameworks/what
reuse/frameworks/frameworksVsLibraries
reuse/platforms/what
Quality Assurance
Can
explain
test
case
design
:
testCaseDesign/introduction/what
testing/testingTypes/exploratoryVsScriptedTesting/what
testing/testingTypes/exploratoryVsScriptedTesting/when
testCaseDesign/introduction/positiveVsNegative
testCaseDesign/introduction/blackVsGlass
testCaseDesign/more/testingUseCases
Can
use
EP
for
test
case
design
:
testCaseDesign/equivalencePartitions/what
testCaseDesign/equivalencePartitions/basic
testCaseDesign/equivalencePartitions/intermediate
Can
use
Boundary
Value
Analysis
for
test
case
design
:
testCaseDesign/boundaryValueAnalysis/what
testCaseDesign/boundaryValueAnalysis/how
🅿️ Project
Can
evolve
a
product
incrementally
:
Week 11
Requirements
Can
explain
object
oriented
domain
models
:
modeling/modelingStructures/objectOrientedDomainModels
Design
Can
apply
some
more
design
patterns
:
designPatterns/modelViewController/what
designPatterns/observer/what
designPatterns/abstractionOccurrence/what
designPatterns/more/otherDesignPatterns
Can
optimize
the
use
of
design
patterns
:
designPatterns/more/combiningDesignPatterns
designPatterns/more/usingDesignPatterns
designPatterns/more/vsPrinciples
designPatterns/more/otherTypesOfPatterns
Quality Assurance
Can
apply
heuristics
to
combine
multiple
test
inputs
:
testCaseDesign/combiningTestInputs/why
testCaseDesign/combiningTestInputs/combinationStrategies
testCaseDesign/combiningTestInputs/heuristicValid
testCaseDesign/combiningTestInputs/heuristicInvalid
testCaseDesign/combiningTestInputs/mix
Project Management
Can
explain
types
of
SDLC
process
models
:
processModels/introduction/what
processModels/introduction/sequentialModels
processModels/introduction/iterativeModels
processModels/introduction/agileModels
Can
explain
some
popular
SDLC
process
models
:
processModels/exampleProcessModels/scrum
processModels/exampleProcessModels/xp
processModels/exampleProcessModels/unifiedProcess
processModels/more/cmmi
processModels/summary/recap
🅿️ Project
Can
release
a
product
incrementally
:
Week 12
Design
Can
explain
some
UML
models
:
modeling/modelingStructures/deploymentDiagrams
modeling/modelingStructures/componentDiagrams
modeling/modelingStructures/packageDiagrams
modeling/modelingStructures/compositeStructureDiagrams
modeling/modelingBehaviors/timingDiagrams
modeling/modelingBehaviors/interactionOverviewDiagrams
modeling/modelingBehaviors/communicationDiagrams
modeling/modelingBehaviors/stateMachineDiagrams
Implementation
Can
explain
cloud
computing
basics
:
reuse/cloudComputing/what
reuse/cloudComputing/services
🅿️ Project
Can
describe
a
technical
contribution
:
Week 13
🅿️ Project
Can
acceptance-test
a
product
:
Can
evaluate
a
technical
effort
:
Can
demo
a
product
: